pathofexilefandomcom_zh-20200213-history
模块:Miscellaneous
Module for implementing miscellaneous templates in lua. Mostly exists here so we don't have hundred of module pages for templates that don't have a lot of code. If a template requires a *lot* of coding consider moving it into it's own lua module. -- local xtable = require('Module:Table') local util = require('Module:Util') local getArgs = require('Module:Arguments').getArgs local game = require('Module:Game') local mbox = require('Module:Message box').main local p = {} local g_frame, g_args -- -- Template: GemLevelTable -- function p.gem_level_table(frame) g_args = getArgs(frame, { parentFirst = true }) if frame nil or type(frame) 'table' then frame = mw.getCurrentFrame() end g_args.width = g_args.width or 'auto' local out = {} out#out+1 = '{| class="wikitable GemLevelTable" ' out#out+1 = 'style="width: ' out#out+1 = g_args.width out#out+1 = '; text-align: center"\n' out#out+1 = '! Level\n' out#out+1 = '!' .. util.html.abbr(' ', 'Required Level', 'nounderline') .. '\n' for i, v in ipairs(game.constants.attributes) do if g_args[v'short_lower'] ~= nil then out#out+1 = '!' .. util.html.abbr(' ', 'Required ' .. v'long_upper', 'nounderline') .. '\n' end end -- original had cost, reserve, duration, radius, unneeded I believe i = 0 -- increase if necessary while i < 25 do local header = g_args.. i if header ~= nil then out#out+1 = '! ' .. header .. '\n' end i = i + 1 end out#out+1 = '!' .. util.html.abbr('Exp.', 'Experience Needed to Level Up') .. '\n' out#out+1 = '!' .. util.html.abbr('Total Exp.', 'Total Experience Needed') .. '\n' return table.concat(out) end -- -- Template: ItemFilterList -- function p.filter_list(frame) g_args = getArgs(frame, { parentFirst = true }) if frame nil or type(frame) 'table' then frame = mw.getCurrentFrame() end g_frame = frame g_args.type = g_args.type or '' tbl = mw.html.create('table') tbl :attr('class', 'wikitable sortable') tblrow = tbl:tag('tr') :tag('th') :attr('rowspan', 2) :wikitext('Name') :done() :tag('th') :attr('rowspan', 2) :wikitext('Author') :done() :tag('th') :attr('rowspan', 2) :wikitext('Release') :done() :tag('th') :attr('colspan', 9) :wikitext('Ingame Features') :done() :tag('th') :attr('colspan', 1) :wikitext('Other Features') :done() :tag('th') :attr('colspan', 2) :wikitext('Filtration Support') :done() if g_args.type 'specialized' then tblrow:tag('th') :attr('rowspan', 2) :wikitext('Description') :done() end tblrow = tbl:tag('tr') :tag('th') :wikitext('Colours') :done() :tag('th') :wikitext('Borders') :done() :tag('th') :wikitext('Font Size') :done() :tag('th') :wikitext('Background') :done() :tag('th') :wikitext('Item Hiding') :done() :tag('th') :wikitext('Leveling') :done() :tag('th') :wikitext('Endgame') :done() :tag('th') :wikitext('Vendor recipes') :done() :tag('th') :wikitext('Crafting') :done() -- Other Features :tag('th') :wikitext('Customizable') :done() -- Filtration :tag('th') :wikitext('General') :done() :tag('th') :wikitext('Themes') :done() :done() :wikitext(g_args.rows) --return tostring(tbl) .. frame:extensionTag{ name = 'references', content = '', args = {group='note'}} return tostring(tbl) end -- -- Template: ItemFilterListRow -- local filter_list_required_args = xtable:new({'name', 'release_link', 'author', 'release', 'colour', 'border', 'font_size', 'background', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'}) local filter_list_range_args = xtable:new({'colour', 'border', 'font_size', 'background', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'}) local filter_list_range_values = xtable:new({'no', 'minor', 'partial', 'major', 'yes'}) local filter_list_yes_no_args = xtable:new({'customization', 'filtration_general', 'filtration_themes'}) local filter_list_yes_no = xtable:new({'no', 'partial', 'yes', 'unknown'}) -- Test: =p.filter_list{rows=p.filter_list_row{name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes', border='yes', font_size='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015'}} -- =p.filter_list{type='specialized',rows=p.filter_list_row{type='specialized', name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes',colour_note="test", border='yes', font_size='no', background='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015', description='test'}} function p.filter_list_row(frame) g_args = getArgs(frame, { parentFirst = true }) if frame nil or type(frame) 'table' then frame = mw.getCurrentFrame() end g_frame = frame -- Checking args for _, arg in ipairs(filter_list_required_args) do if g_argsarg nil then error('Required argument ' .. arg .. ' is missing') end end g_args.filtration_general = g_args.filtration_general or 'unknown' g_args.filtration_themes = g_args.filtration_themes or 'unknown' g_args.customization = g_args.customization or 'unknown' g_args.descriptipon = g_args.description or ' ' g_args.type = g_args.type or '' -- Checking & formatting args for _, arg in ipairs(filter_list_range_args) do local val = g_argsarg local index = filter_list_range_values:index(val) if index then g_argsarg = index else index = util.cast.number(val) if index ~= nil and index >= 0 and index < filter_list_range_values:size() then -- Lua starts counting at 1 g_argsarg = index+1 else error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_range_values, ' ')) end end end for _, arg in ipairs(filter_list_yes_no_args) do local val = g_argsarg if not filter_list_yes_no:contains(val) then error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_yes_no, ' ')) end end -- Output tblrow = mw.html.create('tr') tblrow :tag('td') :wikitext('.. g_args.release_link .. ' ' .. g_args.name .. '') :done() :tag('td') :wikitext(g_args.author) :done() :tag('td') :wikitext(g_args.release) :done() -- Basic Features for _, arg in ipairs(filter_list_range_args) do local index = g_argsarg local text = filter_list_range_valuesindex or '' local note = g_args.. '_note' tblrow :tag('td') :attr('class', 'table-cell-coloured table-cell-' .. text ) :attr('data-sort-value', index) :wikitext(filter_list_get_arg(arg)) :done() end -- Other Features for _, arg in ipairs(filter_list_yes_no_args) do local val = g_argsarg tblrow :tag('td') :attr('class', 'table-cell-coloured table-cell-' .. val) :attr('data-sort-value', '' .. filter_list_yes_no:index(val)) :wikitext(filter_list_get_arg(arg)) :done() end if g_args.type 'specialized' then tblrow :tag('td') :wikitext(filter_list_get_arg('description')) :done() end return tostring(tblrow) end function filter_list_get_arg(arg) -- Return a formatted table cell for the given argument -- local val = g_argsarg if type(val) 'number' then val = filter_list_range_valuesval end if g_args.. '_note' ~= nil then abbr = mw.html.create('abbr') abbr :attr('title', g_args.. '_note') :css('color', 'black') :wikitext(val) :done() return tostring(abbr) else return val end end -- ---------------------------------------------------------------------------- return p